package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;

/**
 * 元素的toString方法与equals方法对集合操作的影响
 */
public class CollectionDemo2 {
    public static void main(String[] args) {
        Collection c = new ArrayList();//ArrayList可以存放重复元素
        c.add(new Point(1, 2));
        c.add(new Point(3, 4));
        c.add(new Point(5, 6));
        c.add(new Point(7, 8));
        c.add(new Point(9, 0));
        c.add(new Point(1, 2));
        /*
            集合重写了toString方法，字符串格式:
            [元素1.toString(), 元素2.toString(), 元素3.toString(),....]
         */
        System.out.println(c);//[Point{x=1, y=2}, Point{x=3, y=4}, Point{x=5, y=6}, Point{x=7, y=8}, Point{x=9, y=0}, Point{x=1, y=2}]

        Collection d = new HashSet();//HashSet是Set集合常用的实现类型, 不能存放重复元素
        d.add(new Point(1, 2));
        d.add(new Point(3, 4));
        d.add(new Point(5, 6));
        d.add(new Point(7, 8));
        d.add(new Point(9, 0));
        d.add(new Point(1, 2));//这里是因为没有重写equals方法, 还是用==来对比,对比的是地址值

        System.out.println(d);//没有重写前, [Point{x=5, y=6}, Point{x=9, y=0}, Point{x=3, y=4}, Point{x=1, y=2}, Point{x=7, y=8}, Point{x=1, y=2}]
                             //重写后,    [Point{x=1, y=2}, Point{x=3, y=4}, Point{x=5, y=6}, Point{x=7, y=8}, Point{x=9, y=0}]

        Point p = new Point(1, 2);
        /*
            boolean contains(Object obj)
            判断当前集合是否包含给定元素
            判断包含的依据:该元素是否与集合现有元素存在equals比较为true的情况，存在则
            认为包含该元素。
         */
        boolean contains = c.contains(p);
        System.out.println("是否包含:" + contains);//是否包含:true

        /*
            boolean remove(Object o)
            从集合中删除给定元素
            删除的是集合中与给定元素equals比较为true的元素。
            对于List而言，如果是重复元素，仅删除靠前的第一个元素，并非把所有重复的该元素都删除
         */
        c.remove(p);
        System.out.println(c);//[Point{x=3, y=4}, Point{x=5, y=6}, Point{x=7, y=8}, Point{x=9, y=0}, Point{x=1, y=2}]
    }
}
